/*
 * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Oracle or the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */ 

package apresentacao;

import transferencia.CadeiaTO;
import java.util.ArrayList;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

/**
 *
 * @author lljotall
 */
public class JCadeiaModel implements TreeModel{

    CadeiaTO data;
    private ArrayList<TreeModelListener> treeModelListeners =
        new ArrayList<TreeModelListener>();
    /**
     * Seta data
     * @param data 
     */
    public JCadeiaModel(CadeiaTO data){
        this.data = data;
    }
    /**
     * Método que retorna uma String, que é a raiz do
     * Objeto CadeiaTO
     * @return data.getSiglaRaiz()
     */
    @Override
    public String getRoot() {
        return data.getSiglaRaiz();
    }
    /**
     * Retorna filho dado por índice de um deterinado pai.
     * @param parent
     * @param index
     * @return String
     */
    @Override
    public String getChild(Object parent, int index) {
        return data.getPreRequisitos((String)parent).get(index);
    }
    /**
     * Verifica quantos filhos um nó possui.
     * @param parent
     * @return int
     */
    @Override
    public int getChildCount(Object parent) {
        return data.getPreRequisitos((String)parent).size();
    }
    /**
     * Verifica se um nó e folha, ou seja, se ele não tem nenhum pré-req.
     * @param node
     * @return boolean
     */
    @Override
    public boolean isLeaf(Object node) {
        return data.getPreRequisitos((String)node) == null;
    }
    
    /**
     * Método para mudança de caminhos, lança uma exceção.
     * @param path
     * @param newValue 
     */
    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    /**
     * Dado um pai e um filho retorna a geração do filho.
     * @param parent
     * @param child
     * @return int
     */
    @Override
    public int getIndexOfChild(Object parent, Object child) {
        return data.getPreRequisitos((String)parent).indexOf(child);
    }
    
    /**
     * Método para adicionar na árvore
     * @param l 
     */
    @Override
    public void addTreeModelListener(TreeModelListener l) {
        treeModelListeners.add(l);
    }
    
    /**
     *Método para remover da árvore. 
     * @param l 
     */
    @Override
    public void removeTreeModelListener(TreeModelListener l) {
        treeModelListeners.remove(l);
    }
    
}
